<?php
/**
 * Class Historico{}
 * Responsavem em guardar todas as açoes efetuadas pelos usuarios.
 */
class Historico
{
    private $sql;
    private $nomeTabela;
    private $idRegistro;
    private $acao;
    private $idUsuario;
    
    /**
     * Atribui o SQL executado pelo usuario
     *
     * @param string $sql executado
     */
    public function setSql( $sql )
    {
        if ( is_string($sql) )
        {
            //$this->sql = addslashes($sql); // alterado
            $this->sql = $sql;
        }
    }
    
    /**
     * Atribui o nome da tabela que foi alterada
     *
     * @param string $tabela
     */
    public function setNomeTabela( $tabela )
    {
        if ( is_string($tabela) )
        {
            $this->nomeTabela = $tabela;
        }
    }
    
    /**
     * Atribui o id do registro que foi inserido, modificado ou excluido
     *
     * @param integer $id id do registro
     */
    public function setIdRegistro( $id )
    {
        if ( is_numeric($id) )
        {
            $this->idRegistro = $id;
        }
    }
    
    /**
     * Atribui o tipo de acao executada pelo usuario
     *
     * @param string $acao ação executada
     */
    public function setAcao( $acao )
    {
        switch ( $acao )
        {
            case "Inserir" :
                $this->acao = 1;
                break;
            case "Editar" :
                $this->acao = 2;
                break;
            case "Excluir" :
                $this->acao = 3;
                break;
            case "Imprimir" :
                $this->acao = 4;
                break;
        }
    }
    
    /**
     * Atribui o usurio responsavel pela ação
     *
     * @param integer $id id do usuario
     */
    public function setIdUsuario( $id )
    {
        if ( is_numeric($id) )
        {
            $this->idUsuario = $id;
        }
    }
    
    /**
     * Reponsavem em inserir o a ação executada pelo usuario na tabela historico
     */
    public function cadastraHistorico()
    {
        try
        {
            $pdo = Conexao::open('sistema'); // abre conexao com o banco de dados
            // retorna a instrução SQL e a executa
            $pdo->exec($this->getSqlHistorico());
            $pdo = null; // fecha conexao
        }
        catch ( PDOException $e )
        {
            new Excecao($e);
        }
    }
    
    /**
     * Metodo responsavel em retornar instrução sql do historico
     * @return string SQL do historico
     */
    public function getSqlHistorico()
    {
        
        // cria uma instrução de INSERT
        $sql = new SqlInserir();
        // define o nome da entidade
        $sql->setTabela('historico.historico');
        // atribui o valor de cada coluna
        $sql->setCampo('id_usuario', $this->idUsuario);
        $sql->setCampo('historico', $this->sql);
        $sql->setCampo('nome_tabela', $this->nomeTabela);
        $sql->setCampo('id_registro', $this->idRegistro);
        $sql->setCampo('id_tipo_acao', $this->acao);
        // retorna a instrução SQL
        return $sql->getInstrucao();
    }
    
    
    /**
     * Método responsevel em retornar o usuario e a ação que foi feita por ultimo em uma determinado registro
     * deve ser setado os atributos id_registro e nome tabela.
     * @return array Ira retornar um array com os dados data_criacao, usuario_nome, tipo_acao.
     */
    public function getUsuarioAcao()
    {
        $sql = "SELECT
                    to_char(historico.data_criacao, 'DD/MM/YYYY HH24:MI:SS') AS data_criacao,
                    usuario.nome AS usuario_nome,
                    tipo_acao.tipo_acao AS tipo_acao
                FROM
                    historico.historico
                INNER JOIN
                    cadastros.usuario ON usuario.id_usuario = historico.id_usuario
                INNER JOIN
                    historico.tipo_acao ON tipo_acao.id_tipo_acao = historico.id_tipo_acao
                WHERE
                    historico.nome_tabela = :nomeTabela
                AND
                    historico.id_registro = :idRegistro
                ORDER BY
                    historico.id_historico DESC
                LIMIT 1 OFFSET 0;";
        
        $pdo = Conexao::open('sistema'); // abre conexao com o banco de dados
        $consultaHistorico = $pdo->prepare($sql); // prepara sql
        $consultaHistorico->bindParam(':idRegistro', $this->idRegistro, PDO::PARAM_INT);
        $consultaHistorico->bindParam(':nomeTabela', $this->nomeTabela, PDO::PARAM_STR);
        $consultaHistorico->execute(); // executa sql
        $linhaHistorico = $consultaHistorico->fetch(PDO::FETCH_ASSOC);
        $pdo = null; // fecha conexao
        

        return $linhaHistorico;
    }
}
?>